//
//  WXHomeTableViewController.swift
//  WXWeiBo
//
//  Created by Angel-xin on 2016/09/19.
//  Copyright © 2016年 Angel-xin. All rights reserved.
//

import UIKit
import YYModel

// 重用标记
private let WXHomeTableViewCellIndentifier = "WXHomeTableViewCellIndentifier"

class WXHomeTableViewController: WXVisitorTableViewController {

    // MARK: - 懒加载
    // 记录数据源
//    lazy var statusList: [WXStatus] = [WXStatus]()
    
    // 使用对应的 ViewModel 对象
    fileprivate lazy var statusListViewModel: WXStatusListViewModel = WXStatusListViewModel()
    
    // 上拉加载
    fileprivate lazy var pullUpIndicatorView: UIActivityIndicatorView = {
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.whiteLarge)
        view.color = UIColor.lightGray
        return view
    }()
    
    fileprivate lazy var pullDownView: UIRefreshControl = {
        let view = UIRefreshControl()
        // 添加下拉刷新事件
        view.addTarget(self, action: #selector(pullDownRefreshing), for: .valueChanged)
        return view
    }()
    
    // 自定义下拉刷新控件
    fileprivate lazy var pullDownCtr: WXRefreshControl = {
        let view = WXRefreshControl()
        view.addTarget(self, action: #selector(pullDownRefreshing), for: .valueChanged)
        return view
    }()
    
    // tipLabel
    fileprivate lazy var tipLabel: UILabel = {
        let label = UILabel(textColor: UIColor.white, fontSize: 12)
        label.backgroundColor = UIColor.orange
        label.textAlignment = .center
        label.text = "没有加载到最新的微博数据"
        label.isHidden = true
        return label
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        if isLogin {
            setupUI()
            setupTableView()
            // 表示登录, 加载微博数据
            loadData()
        } else {
            // 未登录
            visitorView?.updateVisitorInfo(message: nil, imageName: nil)
        }
    }
    
    // 添加控件设置约束
    private func setupUI() {
        
        if let nav = self.navigationController {
            // 把tipLabel添加到导航栏下面
            nav.view.insertSubview(tipLabel, belowSubview: nav.navigationBar)
            // 设置其与导航栏底部对象
            // nav.navigationBar.frame.maxY获取最大y轴 -> swift 3.0
            tipLabel.frame = CGRect(x: 0, y: nav.navigationBar.frame.maxY - 35, width: nav.navigationBar.width, height: 35)
        }
    }

    // 设置UITableView的相关操作
    private func setupTableView() {
        
        // UITableViewCell.self 表示获取 Class
        tableView.register(WXHomeTableViewCell.self, forCellReuseIdentifier: WXHomeTableViewCellIndentifier)
        
        // 设置行高-> 自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        
        // 预估行高
        tableView.estimatedRowHeight = 200
        
        // 取消自带分割线
        tableView.separatorStyle = UITableViewCellSeparatorStyle.none
        
        // 上拉加载视图
        tableView.tableFooterView = pullUpIndicatorView

        // 下拉刷新视图
//        self.refreshControl = pullDownView
        
        // 自定义下拉刷新视图
        tableView.addSubview(pullDownCtr)
    }
    
    private func endRefreshing() {
        // 结束刷新
        pullUpIndicatorView.stopAnimating()
        
        // 结束下拉刷新
//        pullDownView.endRefreshing()
        
        // 结束自定义下拉结束
        pullDownCtr.endRefreshing()

    }
    
    // 下拉刷新操作
    @objc private func pullDownRefreshing() {
        print("下拉刷新")
        loadData()
    }
    
    // 开启tip动画
    private func startAnimation(message: String) {
        
        // 当前tipLabel如果显示表示正在执行动画,那么不需要再次执行
        if tipLabel.isHidden == false {
            return
        }
        
        tipLabel.text = message
        // 显示label
        tipLabel.isHidden = false
        
        UIView.animate(withDuration: 1, animations: {
            self.tipLabel.transform = CGAffineTransform(translationX: 0, y: self.tipLabel.height)
            
        }) { (_) in
            UIView.animate(withDuration: 1, animations: {
                self.tipLabel.transform = CGAffineTransform.identity
                }, completion: { (_) in
                    self.tipLabel.isHidden = true
            })
        }
    }

    
    // 加载首页微博数据
    func loadData() {
        
        statusListViewModel.loadData(isPullup: pullUpIndicatorView.isAnimating) { (isSuccess, message) in
            // 如果是上拉加载其执行tip动画
            if !self.pullUpIndicatorView.isAnimating {
                self.startAnimation(message: message)
            }

            // 结束刷新
            self.endRefreshing()
            if isSuccess {
                self.tableView.reloadData()
            }
        }
        
//        let accessToken = WXUserAccountViewModel.sharedUserAccountViewModel.accessToken!
//        
//        WXNetworkingTools.sharedTools.requestStatuses(accessToken: accessToken) { (response, error) in
//            
//            // 代码执行到此表示网络请求成功
//            if error != nil {
//                print("网络请求异常: \(error)")
//                return
//            }
//            
//            guard let dic = response as? [String: Any] else {
//                print("你不是一个正确的字典格式")
//                return
//            }
//            
//            guard let statusArray = dic["statuses"] as? [[String: Any]] else {
//                print("你不是一个一个正确的字典格式")
//                return
//            }
//            
////            var tempArray = [WXStatus]()
////            
////            // 遍历数组字典
////            for statusDic in statusArray {
////                
////                // 字典转模型
////                let status = WXStatus(dic: statusDic)
////                tempArray.append(status)
////            }
//            
//            // 记录返回的数据模型,重新加载数据
////            self.statusList = tempArray
//            
//            // 使用yymodel进行数组字典转成数组模型
//            let statusArr = NSArray.yy_modelArray(with: WXStatus.self, json: statusArray) as! [WXStatus]
//            self.statusList = statusArr
//            self.tableView.reloadData()
//        }
//        
    }

}

extension WXHomeTableViewController {
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusListViewModel.statusList.count

    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: WXHomeTableViewCellIndentifier, for: indexPath) as! WXHomeTableViewCell
        // 获取cell对应的ViewModel
        let viewModel: WXStatusViewModel = statusListViewModel.statusList[indexPath.row]
        // 绑定数据
        cell.statusViewModel = viewModel
        // 取消选中的颜色
        cell.selectionStyle = .none

        return cell
    }
    
    // 将要显示cell的时候判断是否是最后一个cell
    override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        if indexPath.row == statusListViewModel.statusList.count - 1 && !pullUpIndicatorView.isAnimating {
            pullUpIndicatorView.startAnimating()
            print("已经滚动到最后一个cell了")
            loadData()
        }
    }
}
